LWG 1323 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@119560 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/string b/include/string index 61f993a..3056a6b 100644 --- a/include/string +++ b/include/string 
@@ -200,13 +200,13 @@  basic_string& replace(size_type pos, size_type n1, const_pointer s, size_type n2);  basic_string& replace(size_type pos, size_type n1, const_pointer s);  basic_string& replace(size_type pos, size_type n1, size_type n2, value_type c); - basic_string& replace(iterator i1, iterator i2, const basic_string& str); - basic_string& replace(iterator i1, iterator i2, const_pointer s, size_type n); - basic_string& replace(iterator i1, iterator i2, const_pointer s); - basic_string& replace(iterator i1, iterator i2, size_type n, value_type c); + basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str); + basic_string& replace(const_iterator i1, const_iterator i2, const_pointer s, size_type n); + basic_string& replace(const_iterator i1, const_iterator i2, const_pointer s); + basic_string& replace(const_iterator i1, const_iterator i2, size_type n, value_type c);  template<class InputIterator> - basic_string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2); - basic_string& replace(iterator i1, iterator i2, initializer_list<value_type>); + basic_string& replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2); + basic_string& replace(const_iterator i1, const_iterator i2, initializer_list<value_type>);    size_type copy(pointer s, size_type n, size_type pos = 0) const;  basic_string substr(size_type pos = 0, size_type n = npos) const; @@ -1198,19 +1198,19 @@  basic_string& replace(size_type __pos, size_type __n1, const_pointer __s, size_type __n2);  basic_string& replace(size_type __pos, size_type __n1, const_pointer __s);  basic_string& replace(size_type __pos, size_type __n1, size_type __n2, value_type __c); - basic_string& replace(iterator __i1, iterator __i2, const basic_string& __str); - basic_string& replace(iterator __i1, iterator __i2, const_pointer __s, size_type __n); - basic_string& replace(iterator __i1, iterator __i2, const_pointer __s); - basic_string& replace(iterator __i1, iterator __i2, size_type __n, value_type __c); + basic_string& replace(const_iterator __i1, const_iterator __i2, const basic_string& __str); + basic_string& replace(const_iterator __i1, const_iterator __i2, const_pointer __s, size_type __n); + basic_string& replace(const_iterator __i1, const_iterator __i2, const_pointer __s); + basic_string& replace(const_iterator __i1, const_iterator __i2, size_type __n, value_type __c);  template<class _InputIterator>  typename enable_if  <  __is_input_iterator<_InputIterator>::value,  basic_string&  >::type - replace(iterator __i1, iterator __i2, _InputIterator __j1, _InputIterator __j2); + replace(const_iterator __i1, const_iterator __i2, _InputIterator __j1, _InputIterator __j2);  _LIBCPP_INLINE_VISIBILITY - basic_string& replace(iterator __i1, iterator __i2, initializer_list<value_type> __il) + basic_string& replace(const_iterator __i1, const_iterator __i2, initializer_list<value_type> __il)  {return replace(__i1, __i2, __il.begin(), __il.end());}    size_type copy(pointer __s, size_type __n, size_type __pos = 0) const; @@ -2400,7 +2400,7 @@  __is_input_iterator<_InputIterator>::value,  basic_string<_CharT, _Traits, _Allocator>&  >::type -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2,  _InputIterator __j1, _InputIterator __j2)  {  for (; true; ++__i1, ++__j1) @@ -2416,7 +2416,7 @@  erase(__i1, __i2);  break;  } - traits_type::assign(*__i1, *__j1); + traits_type::assign(const_cast<value_type&>(*__i1), *__j1);  }  return *this;  } @@ -2453,7 +2453,7 @@  template <class _CharT, class _Traits, class _Allocator>  _LIBCPP_INLINE_VISIBILITY inline  basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const basic_string& __str) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const basic_string& __str)  {  return replace(static_cast<size_type>(__i1 - begin()), static_cast<size_type>(__i2 - __i1),  __str.data(), __str.size()); @@ -2462,7 +2462,7 @@  template <class _CharT, class _Traits, class _Allocator>  _LIBCPP_INLINE_VISIBILITY inline  basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const_pointer __s, size_type __n) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const_pointer __s, size_type __n)  {  return replace(static_cast<size_type>(__i1 - begin()), static_cast<size_type>(__i2 - __i1), __s, __n);  } @@ -2470,7 +2470,7 @@  template <class _CharT, class _Traits, class _Allocator>  _LIBCPP_INLINE_VISIBILITY inline  basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const_pointer __s) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const_pointer __s)  {  return replace(static_cast<size_type>(__i1 - begin()), static_cast<size_type>(__i2 - __i1), __s);  } @@ -2478,7 +2478,7 @@  template <class _CharT, class _Traits, class _Allocator>  _LIBCPP_INLINE_VISIBILITY inline  basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, size_type __n, value_type __c) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, size_type __n, value_type __c)  {  return replace(static_cast<size_type>(__i1 - begin()), static_cast<size_type>(__i2 - __i1), __n, __c);  } @@ -3719,12 +3719,12 @@  extern template  enable_if<__is_input_iterator<char const*>::value, string&>::type  string:: - replace<char const*>(string::iterator, string::iterator, char const*, char const*); + replace<char const*>(string::const_iterator, string::const_iterator, char const*, char const*);    extern template  enable_if<__is_input_iterator<wchar_t const*>::value, wstring&>::type  wstring:: - replace<wchar_t const*>(wstring::iterator, wstring::iterator, wchar_t const*, wchar_t const*); + replace<wchar_t const*>(wstring::const_iterator, wstring::const_iterator, wchar_t const*, wchar_t const*);    extern template  enable_if<__is_forward_iterator<wchar_t*>::value, wstring&>::type